/*! \file
 * \brief Empty.
 * \author Ivo Wingelaar
 * \date 2011
 * \version 0.1.0
 * \copyright GNU Lesser General Public License v3
 */

#ifndef __MYTH_RANDOM_RANDOM_ALGORITHM_MOTHER_OF_ALL_C_HPP_INCLUDED__
#define __MYTH_RANDOM_RANDOM_ALGORITHM_MOTHER_OF_ALL_C_HPP_INCLUDED__

#include "MythRandom_AlgorithmStub_C.hpp"

namespace Myth
{
namespace Random
{

/** class                        **/
/** AlgorithmMotherOfAll_C **/
//! A mother-of-all random number generator.
class AlgorithmMotherOfAll_C : public AlgorithmStub_C
{
public:
    /** constructor **/
    /// \param   int32_t seed
    ///         The seed you want to initialize the generator with.
    AlgorithmMotherOfAll_C( int32_t seed);

    /** default destructor **/
    virtual ~AlgorithmMotherOfAll_C();

    /** virtual function **/
    /** random_init      **/
    //! Initializes the generator with a new seed.
    /// \return void
    /// \param   int32_t seed
    ///         The seed to initialize the generator with.
    virtual void random_init( int32_t seed);

    /** virtual function **/
    /** get_random_bytes **/
    //! Return 32 random bits.
    /// \return uint32_t
    ///         32 random bits.
    /// \param  void
    virtual uint32_t get_random_bytes(void);

private:
    //! The internal state.
    uint32_t mX[5];
};

} // namespace Random
} // namespace Myth

#endif // __MYTH_RANDOM_RANDOM_ALGORITHM_MOTHER_OF_ALL_C_HPP_INCLUDED__

